package com.echo.im.domain.friend.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.echo.im.domain.friend.vo.FriendVO;
import com.echo.im.domain.user.vo.OnlineTerminalVO;

import com.echo.im.domain.friend.dto.AddFriendDTO;
import com.echo.im.domain.friend.dto.HandlerAddFriendDTO;
import com.echo.im.domain.friend.dto.UpdateFriendDTO;
import com.echo.im.repository.dao.entity.Friend;

import java.util.List;


/**
 * 好友服务
 * 该接口提供了好友相关的业务操作，包括查询、添加、删除以及处理好友申请等功能
 * @author lxy
 * @date 2024-08-14
 */
public interface FriendService extends IService<Friend> {


    /**
     * 更新好友信息
     *
     * @param dto 包含需要更新的好友信息的实体
     */
    void update(UpdateFriendDTO dto);

    /**
     * 删除好友
     *
     * @param friendId 好友的ID
     */
    void delFriend(Long friendId);

    /**
     * 查找指定ID的好友信息
     *
     * @param friendId 好友的ID
     * @return 返回查找到的好友信息
     */
    FriendVO findFriend(Long friendId);

    /**
     * 申请添加好友
     *
     * @param dto 包含申请信息的实体
     */
    void applyAddFriend(AddFriendDTO dto);

    /**
     * 处理好友申请
     *
     * @param dto 包含处理信息的实体
     */
    void handlerFriendApply(HandlerAddFriendDTO dto);

    /**
     * 查找好友列表
     *
     * @return 返回好友列表
     */
    List<FriendVO> findFriendList();

    /**
     * 获取好友在线终端信息
     * @return 好友在线终端信息
     */
    List<OnlineTerminalVO> getFriendsOnlineTerminals();

    /**
     * 推送我的在线状态
     *
     * @param userIds
     */
    void pushMyOnline(List<Long> userIds);
}
